package com.tbit.uqbike.client.service;

import com.tbit.uqbike.client.pojo.RideCardUser;
import com.tbit.uqbike.client.pojo.User;

import java.util.List;

/**
 * 骑行卡用户购买记录
 *
 * @author Leon
 * 2019年9月24日 下午4:04:45
 */
public interface RideCardUserService {

    /**
     * 分页查询
     *
     * @param userId
     * @param pageNO
     * @param rowCount
     * @return
     */
    public List<RideCardUser> queryPage(Integer userId, Integer accountId, Integer pageNO,
                                        Integer rowCount);

    /**
     * 分页查询总数
     *
     * @param userId
     * @return
     */
    public Integer queryCount(Integer userId, Integer accountId);

    /**
     * 添加
     *
     * @param rideCardUser
     */
    public void insert(RideCardUser rideCardUser);

    /**
     * 更新订单支付状态
     *
     * @param orderNO
     */
    public void updatePay(String orderNO, String daeTime);

    /**
     * 根据订单编号查询
     *
     * @param orderNO
     * @return
     */
    public RideCardUser getByOrderNO(String orderNO);

    /**
     * 更新使用次数
     *
     * @param orderNO
     */
    public void updateUseCount(String orderNO);

    /**
     * 更新记录为无效
     *
     * @param orderNO
     */
    public void updateValid(String orderNO);

    /**
     * 删除用户未支付订单
     *
     * @param userId
     */
    public void delNotPay(Integer userId);

    /**
     * 查询用户有效的骑行卡
     *
     * @param userId
     * @return
     */
    public List<RideCardUser> getByValid(Integer userId);

    /**
     * 查询骑行用户的有效骑行卡
     *
     * @param userId
     * @return
     */
    public List<RideCardUser> getRideVaildCard(User user, Integer accountId, Integer feeId);

    /**
     * 获取区域用户骑行卡
     *
     * @param
     * @return
     */
    List<RideCardUser> getByUserId(Integer userId, Integer accountId);

    /**
     * 获取用户最新创建的骑行卡订单
     *
     * @param userId
     * @return
     */
    RideCardUser queryByTime(Integer userId);

    /**
     * 查询用户快到期骑行卡订单
     *
     * @param startTime 开始时间
     * @param endTime   结束时间
     * @return
     */
    List<RideCardUser> getUserRide(Integer accountId, String startTime, String endTime);

    /**
     * 查询用户有效的骑行卡
     *
     * @param userId
     * @return
     */
    List<RideCardUser> checkValid(Integer userId);

    /**
     * 判断用户是否有生效骑行卡
     *
     * @param userId
     * @return
     */
    Boolean hasValidRideCard(Integer userId);

    /**
     * 根据区域id和用户id获取最近一笔有效骑行卡
     *
     * @param accountId 区域id
     * @param userId    用户id
     */
    RideCardUser getRideCardByUserId(Integer accountId, Integer userId);
}
